function Tabela(id){
    this.tabelaElement = document.getElementById('tabela');
    this.artilheirosElement = document.getElementById('artilheiros');
    this.partidasInfo = document.getElementById('partidasInfo');
    this.posicaoClubes = new Array();
}

Tabela.prototype.requestTabelaData = function(){
    preloaderAnimation();
    
    var parameters = new Array();
    parameters['request'] = 'tabela,artilheiros';
    
    var communicator = new Communicator();
    communicator.addParametersList(parameters);
    communicator.sendRequest(receiveRequestTabelaDataHandler);    
}

Tabela.prototype.createHeader = function(){
    var resultsRow = document.createElement('TR');
    resultsRow.className = 'header';
    
    var clubName = document.createElement('TD');
    clubName.appendChild(document.createTextNode("Clube"));

    var clubPoints = document.createElement('TD');
    clubPoints.appendChild(document.createTextNode("Pontos"));

    var clubWins = document.createElement('TD');
    clubWins.appendChild(document.createTextNode("Vitórias"));

    var clubDraws = document.createElement('TD');
    clubDraws.appendChild(document.createTextNode("Empates"));

    var clubLoses = document.createElement('TD');
    clubLoses.appendChild(document.createTextNode("Derrotas"));

    resultsRow.appendChild(clubName);
    resultsRow.appendChild(clubPoints);
    resultsRow.appendChild(clubWins);
    resultsRow.appendChild(clubDraws);
    resultsRow.appendChild(clubLoses);
    
    return resultsRow;
}

Tabela.prototype.createArtilheiros = function(obj){
    var objLen = obj.length;
    
    var fragment = document.createDocumentFragment();
    
    for(var i=0; i<objLen; i++){
        var resultsRow = document.createElement('TR');
        
        var playerName = document.createElement('TD');
        var numGols = document.createElement('TD');
        
        var playerNameString = globalJogadores['jogador_'+obj[i][1]].nome;
        
        playerName.appendChild(document.createTextNode(playerNameString));
        numGols.appendChild(document.createTextNode(obj[i][0]));
        
        resultsRow.appendChild(playerName);
        resultsRow.appendChild(numGols);
        
        fragment.appendChild(resultsRow);
    }
    
    this.artilheirosElement.className = '';
    this.artilheirosElement.appendChild(fragment);
}

Tabela.prototype.createTable = function(obj){
    var objLen = obj.length;
    var fragment = document.createDocumentFragment();
    
    var header = this.createHeader();
    
    for(var i=0; i<objLen; i++){
        var results = obj[i][0].split(',');
        this.posicaoClubes.push(results);
    }   
    
    this.posicaoClubes.sort(organizarIndices);
    this.posicaoClubes.reverse();
    
    for(var i=0; i<this.posicaoClubes.length; i++){
        var resultsRow = document.createElement('TR');
        
        var clubName = document.createElement('TD');
        var clubNameString = globalClubes['clube_'+this.posicaoClubes[i][0]].nome;
        clubName.appendChild(document.createTextNode(clubNameString));
        clubName.className = 'name';
        
        var clubPoints = document.createElement('TD');
        clubPoints.appendChild(document.createTextNode(this.posicaoClubes[i][1]));
        
        var clubWins = document.createElement('TD');
        clubWins.appendChild(document.createTextNode(this.posicaoClubes[i][2]));
        
        var clubDraws = document.createElement('TD');
        clubDraws.appendChild(document.createTextNode(this.posicaoClubes[i][3]));
        
        var clubLoses = document.createElement('TD');
        clubLoses.appendChild(document.createTextNode(this.posicaoClubes[i][4]));
        
        resultsRow.appendChild(clubName);
        resultsRow.appendChild(clubPoints);
        resultsRow.appendChild(clubWins);
        resultsRow.appendChild(clubDraws);
        resultsRow.appendChild(clubLoses);
        
        fragment.appendChild(resultsRow);
    } 
    
    this.tabelaElement.innerHTML = ''; //Limpa tabela
    this.tabelaElement.appendChild(header);
    this.tabelaElement.appendChild(fragment);
    
    this.partidasInfo.className = 'invisible';
    this.tabelaElement.className = '';
    preloaderAnimation();
}

function organizarIndices(a, b){//assume-se que existem mais de uma posição
    var x = a[1];//posicao 0 de a
    var y = b[1];//posicao 0 de b

    if(x < y) return -1; //se x < y, ele vai para trás
    else if(x > y) return 1; //senão para frente

    else{ //se forem iguais, busca em outra posição de a e b, repete-se procedimento
        x = a[1];
        y = b[1];

        if(x > y) return 1;
        else if(x < y) return -1;
        else return 0; //caso sejam iguais novamente, ou continua a lógia ou diz que são de fato iguais
    }
}

function receiveRequestTabelaDataHandler(response){
    var tabela = globalTabela;
    var obj = eval(response);
    tabela.createTable(obj[0]);
    tabela.createArtilheiros(obj[1]);
}